Machine or system virtualization has become common due to many known advantages. Machine virtualization involves abstracting the hardware resources of a computer and presenting the computer as virtual machines. A layer of software referred to as a hypervisor or virtual machine monitor (VMM) runs directly on the hardware of a computer. The hypervisor manages access to the hardware of the computer by virtual machines (VMs), which are also known as partitions, domains, or guests. Each VM is a software environment or construct capable of hosting its own guest operating system. The hypervisor manages the VM's sharing of the computer's processing hardware, memory, and other hardware. The presence of a layer of software—the hypervisor—between the guest operating system and the computer hardware is mostly transparent to the guest operating system.
Guest software in a VM interacts with the host's hardware through a hypervisor or virtualization layer. The guest issues requests to virtual hardware, the requests typically flow through a high-speed software channel between the VM and the virtualization layer, which matches the requests with the real hardware that backs the VM's virtual hardware. A virtualization layer typically receives a VM's requests through a channel, queues the requests, and directs the requests to the appropriate hardware. The guest may not be aware of the virtualization layer, but the virtualization layer introduces overhead in its handling of the guest's requests. For example, dequeuing requests, mapping requests to backing hardware, passing the requests to the backing hardware, and providing results to the VM are typical overhead operations that the virtualization layer incurs.
Virtualization software is often designed with assumptions about the performance of hardware. It has been assumed that the performance of some types of hardware will be slow relative to the overhead of supporting operations of the virtualization layer. For instance, it has been assumed that the latency of servicing VM requests will be mostly attributable to hardware and that the virtualization layer software will impose a relatively small part of the overall latency for handling the VM requests. However, some hardware devices, and even the hardware for communicating with the devices, are becoming fast enough to question this assumption. Some storage devices may now operate on the order of microseconds rather than milliseconds. As storage devices, network interface cards, and other types of virtualized hardware become faster, the relative latency that virtualization adds becomes more significant. In some cases, hardware may be increasingly idle while it waits for the virtualization layer to feed it requests from VMs. That is, the virtualization layer may become a bottleneck and hardware may be underutilized, which defeats one of the benefits of virtualization.
Although it is possible to increase the processing capacity available to the virtualization layer and theoretically reduce its latency, the conditions under which the virtualization layer may become a bottleneck between a guest and hardware are difficult to know in advance. Hardware and workload may vary, even for one VM over short periods of time. There is a need for virtualization layers to dynamically adjust the processing capacity that is available for handling VM requests in ways that are flexible, automatic, independent of workload, and reduce the chance of hardware underutilization without incurring excessive overhead by the virtualization layer.